﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;
using System.Runtime.ExceptionServices;
namespace Lesson4_哈希表学习
{
    internal class Program
    {
        static void Main(string[] args)
        {
            #region 知识点一：基础知识
            //是基于键的哈希代码组织起来的 键/值对
            //只要作用是提高数据查询得效率
            //使用键来访问集合中的元素
            #endregion  知识点二： 申明
            //引用命名空间using System.Collections;
            Hashtable hashtable = new Hashtable();

            #region 知识点三：增删查改

            #region 增
            //只要键不重复就可以，值无所谓
            hashtable.Add(1, 123);  //键和值都是object类型的

            hashtable.Add(2, 456);

            hashtable.Add(true, false);

            #endregion
            #region  删
            //1：只能通过键来删除
            //hashtable.Remove(1);
            #endregion
            //2：删除不存在的键，没反应
            //3：清空
            //hashtable.Clear();

            #region 查
            //找不到返回空NULL
            Console.WriteLine(hashtable[2]);
            //根据键检测

            Console.WriteLine(hashtable.Contains(2));

            //根据值检测

            Console.WriteLine(hashtable.ContainsValue(456));
            #endregion

            #region 改  
            //只能更改键对应的值
            hashtable[1] = 99;
            Console.WriteLine(hashtable[1]);

            #endregion

            #region 哈希表遍历  没有设计到Count
            //遍历的对数
            Console.WriteLine(hashtable.Count);
            Console.WriteLine("*******************");
            //遍历哈希表中的键
            foreach (object item in hashtable.Keys)      //遍历的是键
            {
                Console.WriteLine("键" + item);
                Console.WriteLine("值" + hashtable[item]);
            }

            //遍历哈希表中的值

            foreach (object item in hashtable.Values)
            {
                Console.WriteLine("值" + item);
            }

            //遍历哈希表中的键值对

            foreach(DictionaryEntry item in hashtable)
            {
                Console.WriteLine("键:" + item.Key + "\t" + "值:" + "\t" + item.Value);
            }
            #endregion
            #endregion
        }
    }
}
